|
(******************************************************************************)
(**) ОТДЕЛ ВещОселок+;
(******************************************************************************
* НАЗНАЧЕНИЕ: Скорость при двойной точности/Double precision Whetstone (A001)
******************************************************************************)
ИСПОЛЬЗУЕТ
Матем ИЗ "...\Отделы\Числа\",
ОС ИЗ "...\Отделы\Обмен\",
Вывод ИЗ "...\Отделы\Обмен\";
ПОСТ
NLoopValue = 100;
IIValue = 400;
ВИД
ARRAY4 = РЯД 5 ИЗ ШИРВЕЩ;
ПЕР
E1 :ARRAY4;
T,T1,T2:ШИРВЕЩ;
J,K,L :ЦЕЛ;
ЗАДАЧА PA(E+:ARRAY4);
ПЕР
J1:ЦЕЛ;
УКАЗ
J1:=0;
ПОВТОРЯТЬ
E[1]:=( E[1]+E[2]+E[3]-E[4])*T;
E[2]:=( E[1]+E[2]-E[3]+E[4])*T;
E[3]:=( E[1]-E[2]+E[3]+E[4])*T;
E[4]:=(-E[1]+E[2]+E[3]+E[4])/T2;
J1:=J1+1
ДО J1 >= 6
КОН PA;
ЗАДАЧА P0;
УКАЗ
E1[J]:=E1[K];
E1[K]:=E1[L];
E1[L]:=E1[J]
КОН P0;
ЗАДАЧА P3(X,Y,Z+:ШИРВЕЩ);
ПЕР
X1,Y1:ШИРВЕЩ;
УКАЗ
X1:=X;
Y1:=Y;
X1:=T*(X1+Y1);
Y1:=T*(X1+Y1);
Z:=(X1+Y1)/T2
КОН P3;
ЗАДАЧА POUT(N,J,K:ЦЕЛ; X1,X2,X3,X4:ШИРВЕЩ);
УКАЗ
КОН POUT;
ЗАДАЧА Work;
ПЕР
NLoop,I,II,JJ:ЦЕЛ;
N1,N2,N3,N4,N5,N6,N7,N8,N9,N10,N11:ЦЕЛ;
X1,X2,X3,X4,X,Y,Z:ШИРВЕЩ;
УКАЗ
(* замер начинается здесь *)
T :=0.499975;
T1:=0.50025;
T2:=2.0;
NLoop:=NLoopValue;
II:=IIValue;
ОТ JJ:=1 ДО II ВЫП
(* установим соответствующее число повторов каждой части замера. *)
N1:=0;
N2:=12 *NLoop;
N3:=14 *NLoop;
N4:=345*NLoop;
N5:=0;
N6:=210*NLoop;
N7:=32 *NLoop;
N8:=899*NLoop;
N9:=616*NLoop;
N10:=0;
N11:=93*NLoop;
(* Часть 1: Простые переменные *)
X1:= 1.0;
X2:=-1.0;
X3:=-1.0;
X4:=-1.0;
ОТ I:=1 ДО N1 ВЫП
X1:=( X1+X2+X3-X4)*T;
X2:=( X1+X2-X3+X4)*T;
X3:=( X1-X2+X3+X4)*T;
X4:=(-X1+X2+X3+X4)*T;
КОН;
ЕСЛИ JJ = II ТО
POUT(N1,N1,N1,X1,X2,X3,X4)
КОН;
(* Часть 2: Переменные ряда *)
E1[1]:= 1.0;
E1[2]:=-1.0;
E1[3]:=-1.0;
E1[4]:=-1.0;
ОТ I:=1 ДО N2 ВЫП
E1[1]:=( E1[1]+E1[2]+E1[3]-E1[4])*T;
E1[2]:=( E1[1]+E1[2]-E1[3]+E1[4])*T;
E1[3]:=( E1[1]-E1[2]+E1[3]+E1[4])*T;
E1[4]:=(-E1[1]+E1[2]+E1[3]+E1[4])*T
КОН;
ЕСЛИ JJ = II ТО
POUT(N2,N3,N2,E1[1],E1[2],E1[3],E1[4])
КОН;
(* Часть 3: Ряд, как источник задачи *)
ОТ I:=1 ДО N3 ВЫП
PA(E1)
КОН;
ЕСЛИ JJ = II ТО
POUT(N3,N2,N2,E1[1],E1[2],E1[3],E1[4])
КОН;
(* Часть 4: Условные переходы *)
J:=1;
ОТ I:=1 ДО N4 ВЫП
ЕСЛИ J # 1 ТО J:=3 ИНАЧЕ J:=2 КОН;
ЕСЛИ J <= 2 ТО J:=1 ИНАЧЕ J:=0 КОН;
ЕСЛИ J >= 1 ТО J:=0 ИНАЧЕ J:=1 КОН
КОН;
ЕСЛИ JJ = II ТО
POUT(N4,J,J,X1,X2,X3,X4)
КОН;
(* Часть 5: Пропущена; Часть 6: Целочисленная арифметика *)
J:=1;
K:=2;
L:=3;
ОТ I:=1 ДО N6 ВЫП
J:=J*(K-J)*(L-K);
K:=L*K-(L-J)*K;
L:=(L-K)*(K+J);
E1[L-1]:=(J+K+L);
E1[K-1]:=(J*K*L)
КОН;
ЕСЛИ JJ = II ТО
POUT(N6,J,K,E1[1],E1[2],E1[3],E1[4])
КОН;
(* Часть 7: Тригонометрические функции *)
X:=0.5;
Y:=0.5;
ОТ I:=1 ДО N7 ВЫП
X:=T*Матем.arctg(T2*Матем.sin(X)*Матем.cos(X)/(Матем.cos(X+Y)+Матем.cos(X-Y)-1.0));
Y:=T*Матем.arctg(T2*Матем.sin(Y)*Матем.cos(Y)/(Матем.cos(X+Y)+Матем.cos(X-Y)-1.0))
КОН;
ЕСЛИ JJ = II ТО
POUT(N7,J,K,X,X,Y,Y)
КОН;
(* Часть 8: Вызов задач *)
X:=1.0;
Y:=1.0;
Z:=1.0;
ОТ I:=1 ДО N8 ВЫП
P3(X,Y,Z)
КОН;
ЕСЛИ JJ = II ТО
POUT(N8,J,K,X,Y,Z,Z)
КОН;
(* Часть 9: Доступ к ряду *)
J:=1;
K:=2;
L:=3;
E1[1]:=1.0;
E1[2]:=2.0;
E1[3]:=3.0;
ОТ I:=1 ДО N9 ВЫП
P0
КОН;
ЕСЛИ JJ = II ТО
POUT(N9,J,K,E1[1],E1[2],E1[3],E1[4])
КОН;
(* Часть 10: Целочисленная арифметика *)
J:=2;
K:=3;
ОТ I:=1 ДО N10 ВЫП
J:=J+K;
K:=J+K;
J:=K-J;
K:=K-J-J
КОН;
ЕСЛИ JJ = II ТО
POUT(N10,J,K,X1,X2,X3,X4)
КОН;
(* Часть 11: Математические функции *)
X:=0.75;
ОТ I:=1 ДО N11 ВЫП
X:=Матем.квкор(Матем.exp(Матем.ln(X)/T1))
КОН;
ЕСЛИ JJ = II ТО
POUT(N11,J,K,X,X,X,X)
КОН
КОН
КОН Work;
ЗАДАЧА Голова;
ПЕР
начВремя:ЦЕЛ;
УКАЗ
Вывод.Цепь("Испытание на Whetstone");
начВремя:=ОС.Время();
Work;
Вывод.ЧВещ(" - %f MIPS^",NLoopValue*IIValue*1000.0/(ОС.Время() - начВремя),0,0,0)
КОН Голова;
УКАЗ
Голова
КОН ВещОселок.
▲ Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
|
|